/*
部署建议：
androidback：当面安卓用户点击返回键时执行，如果页面调用：Comm.setAndroidHome（）页面执行询问退出操作
db:上级操作页面返回的数据
特别说明：系统内置变量均为以双下划线 “__”开始，为防止变量污染，请不要在任何时间申明变量时使用双下划线开始，
*/


import { router } from '../router';
import store from '../store/index';
import { Notify } from 'vant';

/*响应android返回键,程序可重写此事件，不可重写，则执行默认事件：关闭*/
function androidback() {
    console.log("get_androidback" + store.getters.get_androidback)
    if (store.getters.get_androidback == 0) { //安卓返回键全局通用 1:正常,0：执行退出APP第一次地址，-1：执行退出APP
        Notify({ type: 'warning', message: '再按一次退出' });
        store.dispatch('set_androidback', -1);
    } else if (store.getters.get_androidback == -1) { //安卓返回键全局通用 1:正常,0：执行退出APP第一次地址，-1：执行退出APP
        console.log('退出成功')
        Comm.close();
    } else {
        router && router.close(-1)
    }
}
/*原生统一回调，系统内置函数*/
function _w9_wcallback(data, code) {
    if (code == null || code === "null") return;
    code = parseInt(code);
    //系统事件
    if (code === 0) {
        //android返回键
        if (data === 'back')
            Comm.exec('androidback');
        //页面重新获得焦点
        else if (data === 'resume') {
            Comm.exec('pageresume');
            //事件级回调
            if (Comm._pageinfo.resume) {
                Comm._pageinfo.resume();
                Comm._pageinfo.resume = null;
            }
        }
    }
    //原生事件
    else if (code > 0) {
        var temp = Comm._pageinfo.e[code];
        if (temp) {
            delete Comm._pageinfo.e[code];
            temp.cb(temp.db ? Comm._deData(data) : Comm.parse(data));
            temp = null;
        }
    }
}

var Comm = new function() {
    //网页历史记录
    var z = this;
    //处理原生回调路由	
    function callNative(m, d) {
        if (z.ios()) {
            var data = {
                method: m + (d === null ? '' : ':')
            };
            if (d) data['data'] = toStr(d);
            window.webkit.messageHandlers.WeiLai.postMessage(data);
        } else {
            if (window.WeiLai && (typeof window.WeiLai[m] === typeof
                    function() {})) {
                if (d === null)
                    window.WeiLai[m]();
                else
                    window.WeiLai[m](toStr(d));
            }
        }
    }
    //对象转str
    function toStr(o) {
        if (typeof(o) == typeof({}))
            return JSON.stringify(o);
        return o;
    }
    //设置保留回调方法并返回句柄
    function setcb(cb, db) {
        var code = (++z._pageinfo.code);
        z._pageinfo.e[code] = {
            cb: cb,
            db: db
        };
        return code;
    }
    //存储对象或内容时编码
    function enData(o) {
        return encodeURIComponent(JSON.stringify(o)) //.replace(/\%/g, "/");
    }
    //取出对象或内容时解码，系统内置函数
    z._deData = function(s) {
        if (s && s.indexOf('/') > -1) {
            s = decodeURIComponent(s.replace(/\//g, "%"));
        }
        return JSON.parse(s);
    }
    z._pageinfo = {
        android_home: 0,
        wback: null,
        code: 1,
        e: {},
        test: false
    };

    /*--------------------公共函数-----------------------*/
    /*处理示申明对象undefined*/
    z.un = function() {
        return 'undefined'
    };
    //尝试转化str to json
    z.parse = function(s) {
        var o;
        try {
            o = JSON.parse(s);
        } catch (e) {
            o = s;
        }
        return o;
    };
    //尝试执行根方法
    z.exec = function(m) {
        if (window[m]) {
            var a = [];
            for (var i = 1; i < arguments.length; i++)
                a[i - 1] = arguments[i];
            window[m].apply(null, a);
        }
    };
    //处理统一回调事件
    z.callback = function(d, code) {
        _w9_wcallback(d, code);
    };
    //是否处理微信中
    z.wx = function() {
        return navigator.userAgent.toLocaleLowerCase().indexOf('micromessenger') > -1
    };
    //是否是ios
    z.ios = function() {
        return window.webkit != null && window.webkit.messageHandlers != null && !z.wx();
    };
    //是否为原生返回 true 表示是原生
    z.w9 = function() {
        return (window['WeiLai'] || z.ios());
    };
    //重写getElementById
    z.g = function(id) {
        return document.getElementById(id);
    };
    //代替JQ
    z.$1 = function(s) {
        return document.querySelector(s);
    };
    z.$ = function(s) {
        return document.querySelectorAll(s);
    };
    //关闭退出APP，默认为1
    z.close = function(c) {
        if (z.w9()) callNative('close', (c ? c : 1))
    };
    //判断当前网络是否为wifi环境
    z.isWiFi = function(cb) {
        if (z.w9()) callNative('isWiFi', setcb(cb));
    };
    //通过原生打印数据
    z.jslog = function(str, cb) {
        if (z.w9()) callNative('jslog', str);
        else cb && cb();
    };
    //获取缓存
    z.getCacheSize = function(cb) {
        if (z.w9()) callNative('getCacheSize', setcb(cb));
    };
    //清理缓存
    z.clearCache = function(cb) {
        if (z.w9()) callNative('clearCache', setcb(cb));
    };
    //注册推送--state:1注册0注销,token:登录token ,url：用户device 接口
    /*
    //Comm.registerPush({ state: 1, token: a.data.token, url: config.root + 'api/customer/device' });
    */
    z.registerPush = function(state, cb) {
        state.code = setcb(cb);
        if (z.w9())
            callNative('registerPush', state);
        else
            cb && cb(1);
    };
    //
    //设置推送
    z.setPush = function(jsonObj, cb) {
        jsonObj['code'] = setcb(cb);
        if (z.w9()) callNative('setPush', jsonObj);
    };
    //上传图片
    z.upimg = function(num, cb) {
        var jsonObj = {
            url: 'https://hanyangkeji.top/hy/img/upload/policy/sts',
            //url: 'http://192.168.0.96:8888/img/upload/policy/sts',
            remain: num ? num : 1
        }
        jsonObj['code'] = setcb(cb);
        if (z.w9()) {
            callNative('upimg', jsonObj)
        }
        //上传图片
    };
    //扫描二一维码
    z.scanf = function(cb) {
        if (z.w9()) callNative('scanf', setcb(cb));
    };
    //定位
    z.position = function(cb) {
        if (z.w9()) callNative('position', setcb(cb));
        else
            cb && cb()
    };
    //从地图上选择点,如果是微信则需要地图容器box
    z.selectPosition = function(cb) {
        if (z.w9()) callNative('selectPosition', setcb(cb));
    };
    //分享
    /*  
		//分享图文platform：表示平台 可以不用传入 不传入 就是 所有平台 具体平台 请质询原生开发人员
		Comm.shareUrl({
            platform:platform,//1 微信，2 微信朋友圈 3 QQ 4 QQ 空间 5 新浪微博
			pic: "http://linkfriends99.com/img/login/logobj.png",//分享图片路径
			title: "红包包",//分享标题
			desc: desc,//分享描述
			url: urlList,//分享路径
		}, function (d) {//回调
			if (d == 1) {
				Comm.message("分享成功");
			}
		});
		//分享图片
		Comm.shareUrl({
            base64: share_pic //imgbase64
		}, function (d) {//回调
			if (d == 1) {
				Comm.message("分享成功");
			}
		});
	*/
    //
    z.shareUrl = function(jsonObj, cb) {
        jsonObj['code'] = setcb(cb);
        if (z.w9()) {
            callNative('shareUrl', jsonObj)
        } else {
            window.open(jsonObj.url);
            cb && cb(1);
        }
    };

    //七鱼客服
    z.qiyu = function(jsonObj) {
        if (z.w9()) callNative('qiyu', jsonObj);
    };
    //原生网络请求get
    z.get = function(jsonObj, cb) {
        jsonObj['code'] = setcb(cb);
        if (z.w9()) callNative('get', jsonObj);
    };
    //原生网络请求post
    z.postData = function(jsonObj, cb) {
        jsonObj['code'] = setcb(cb);
        if (z.w9()) callNative('postData', jsonObj);
    };
    //数据获取
    z.storage = function(key, cb) {
        if (z.w9())
            callNative('storage', {
                key: key,
                code: setcb(cb, true)
            });
        else if (cb) {
            cb();
        }
    };

    //设置缓存数据,如果value=null，则删除对象
    z.storageValue = function(key, value, cb) {
        if (z.w9()) {
            if (value != null) {
                if (z.ios()) {
                    value = enData(value);
                }
            }
            callNative('storageValue', {
                key: key,
                value: value,
                code: setcb(cb)
            });
        } else {
            z.db(key, value);
            cb && cb();
        }
    };
    //图片下载
    z.downloadImage = function(mess) {
        if (z.w9()) callNative("saveImg", { urls: mess });
        else
            Comm.goself(mess);
    };
    //下载文件
    z.uploadFile = function(mess) {
        if (z.w9()) callNative("uploadFile", { urls: mess });
        else
            Comm.goself(mess);
    };

    //设置手机转向
    z.rotate = function(value) {
        //1值竖向展示【默认】,	2横向展示
        if (z.w9()) callNative('rotate', value === 1 ? 1 : 2);
    };
    //第三方登录 jsonObj={type：1}:凭证类别 1微信，2QQ,3,f,4t
    /**
     * 
     * Comm.extLogin({ type: type }, function (data) {
            if (data.code == 1) {
                Comm.loading("正在登录");
                AJAX.POST("/common/customer/otherLogin", {
                    openid: data.openid,
                    uid: data.unionid,
                    loginType: type,
                    clientType: 2,
                    customerName: data.nickname,
                    headPort: data.face
                }, function (a) {
                    debugger
                    Comm.loading(false);
                    if (a.code == 1) {
                        Comm.message('登录成功');
                        if (a.data.phone == "") {
                            Comm.go("newBindPhone.html");
                        } else if (a.data.data.identity == "0") {
                            Comm.go("regnext.html")
                        }
                        Comm.gotop("index.html")
                    } else {
                        Comm.message(a.msg);
                    }
                });
            }
        });
     * 
     */
    z.extLogin = function(jsonObj, cb) {
        if (z.w9()) {
            jsonObj['code'] = setcb(cb);
            callNative('extLogin', jsonObj);
        }
    };
    //支付
    /****
     * 调用方式
     */
    /**
         * Comm.loading("正在支付中....")
           var params = {
               url: config.root + '/purchase/normalOrder/pay',
               type: payType,//支付宝 1   微信 3
               ....其他参数
               _token: Comm.db('_token')
           }
           Comm.pay(params, function (res) {
               if (res.code==1) {//支付成功
                   //跳转支付成功页面
                   Comm.go('paysucc.html?oid=' + model.oid + "&ifFlower=" + model.ifFlower)
               }else if(res.ecode == 110){
                   Comm.confirm("登录已过期,请重新登录...", function (d) {
                       AJAX.clear();
                       if (d == 1){
                           Comm.gotop("login.html")
                       }
                   });
               }esle{
                   Comm.message(res.msg);
               }
               Comm.loading(false)
           }) 
       */
    z.pay = function(jsonObj, cb) {
        jsonObj['code'] = setcb(cb);
        if (z.w9()) {
            callNative('pay', jsonObj);
        } else if (Comm.wx()) {
            cb && cb()
        }
    };
    //设备信息
    z.deviceInfo = function(cb) {
        if (z.w9()) callNative('deviceInfo', setcb(cb));
    };
    //获取用户通讯录
    z.getAddressBook = function(cb) {
        if (z.w9()) callNative('getAddressBook', setcb(cb));
    };
    //文本复制
    z.copyText = function(str) {
        if (z.w9()) callNative('copyText', str);
    };
    //获取软件版本号
    z.getVersion = function(cb) {
        if (z.w9()) callNative('getVersion', setcb(cb));
    };
    //获取token
    z.getPushToken = function(cb) {
        if (z.w9()) callNative('getPushToken', setcb(cb));
    };
    //打开外部浏览器
    z.openUrlStr = function(url) {
        if (z.w9()) callNative('openUrlStr', url)
        else Comm.goself(url);
    };
    /*设置android可首页事件*/
    z.setAndroidHome = function(d) {
        z._pageinfo.android_home = d == 0 ? d : 1;
    };
    /*s相当于localStorage,如果用于原生page之间共享数据，请storate*/
    z.db = function(t, v) {
        if (v == null) {
            if (arguments.length === 1) {
                return z._deData(localStorage[t]);
            } else {
                localStorage.removeItem(t);
            }
        } else {
            localStorage[t] = enData(v);
        }
    };
    /*相当于sessionStorage,用于会话存储，不可作为持久存储*/
    z.sdb = function(t, v) {
        if (v == null) {
            return z._deData(sessionStorage[t]);
        }
        sessionStorage[t] = enData(v);
    };
    /*
        跳转第三方地图导航
        { lat: 纬度, lng: 经度, addr: '详细地址' }
    */
    z.navigation = function(obj, cb) {
        if (z.w9())
            callNative("navigation", obj);
        else {
            cb && cb()
        }
    };

    /*处理腾讯IM**/
    z.IM_ConversationList = function(url, api) {
        if (z.w9()) {
            callNative('IM_ConversationList', { _token: Comm.db('_token'), api: api });
        }
    };
    /*处理腾讯IM (  (联系某人  比传参数 conversationId:用户id，sing:授权密码 ：对方的jsonObj={conversationId:conversationId,sing:sing})*/
    z.IM_ShowContact = function(jsonObj, cb) {
        jsonObj.code = setcb(cb);
        if (z.w9()) {
            callNative('IM_ShowContact', jsonObj);
        } else {
            cb && cb()
        }
    };
    /*更新 IM_Refsing*/
    z.IM_Refsing = function(jsonObj, cb) {
        jsonObj.code = setcb(cb);
        if (z.w9()) {
            callNative('IM_Refsing', jsonObj);
        } else {
            cb && cb();
        }
    };
    /*发送需求*/
    z.IM_SendNeed = function(jsonObj, cb) {
        jsonObj.code = setcb(cb);
        if (z.w9()) {
            callNative('IM_SendNeed', jsonObj);
        } else {
            cb && cb();
        }
    };
    /*退出*/
    z.IM_Logout = function(cb) {
        if (z.w9()) {
            callNative('IM_Logout');
        } else {
            cb && cb();
        }
    };
    //打开原生地图
    z.openMap = function(jsonObj, cb) {
        jsonObj.code = setcb(cb);
        if (z.w9()) {
            callNative('openMap', jsonObj);
        } else {
            cb && cb();
        }
    };
    /*
     * 随机生成字符串
     */
    z.randomWord = function() {
        var str = 'xxxxxxxx-4xxxx-yxxx';
        var code = str.replace(/[xy]/g, function(c) {
            var r = Math.random() * 16 | 0,
                v = c == 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
        return code.replace(/-/g, "").toUpperCase();
    };
    //打印面单 jsonObj:{type:1,data:d};
    z.bluetoothPrint = function(jsonObj, cb) {
        jsonObj.code = setcb(cb);
        if (z.w9()) {
            callNative('bluetoothPrint', jsonObj);
        }
    };
};


export {
    androidback,
    _w9_wcallback,
    Comm
}